package git.soulbgm.service;

import git.soulbgm.common.pojo.PageInfo;
import git.soulbgm.pojo.dto.MenuDto;
import git.soulbgm.pojo.entity.Menu;
import git.soulbgm.pojo.vo.MenuTreeVo;

import java.util.List;

/**
 * 菜单相关业务逻辑接口
 *
 * @author SoulBGM
 * @date 2020-09-10 17:14:11
 */
public interface MenuService {

    /**
     * 分页查询菜单
     *
     * @param pageNum  页码
     * @param pageSize 每页显示数
     * @param menu     查询条件
     * @return 分页之后的查询信息
     */
    PageInfo find(Integer pageNum, Integer pageSize, MenuDto menu);

    /**
     * 按菜单ID查询菜单信息
     *
     * @param id 菜单ID
     * @return 菜单信息
     */
    Menu findById(Long id);

    /**
     * 按角色ID查询菜单
     *
     * @param roleId 角色ID
     * @return 菜单显示列表
     */
    List<MenuTreeVo> findByRoleId(Long roleId);

    /**
     * 通过角色ID查询归属的菜单ID列表
     *
     * @param roleId 角色ID
     * @return 菜单ID列表
     */
    List<Long> getMenuIdList(Long roleId);

    /**
     * 按用户ID查询菜单
     *
     * @param userId 用户ID
     * @return 菜单显示列表
     */
    List<MenuTreeVo> findByUserId(Long userId);

    /**
     * 查询全部的菜单
     *
     * @return 菜单显示列表
     */
    List<MenuTreeVo> findTree();

    /**
     * 添加角色与菜单对应数据
     *
     * @param roleId     角色ID
     * @param menuIdList 菜单ID列表
     * @return 添加成功返回true否则返回false
     */
    Boolean addRoleMenu(Long roleId, List<Long> menuIdList);

    /**
     * 添加菜单信息
     *
     * @param menu 菜单信息
     * @return 添加之后的菜单信息
     */
    Menu add(Menu menu);

    /**
     * 修改菜单信息
     *
     * @param menu 菜单信息
     * @return 修改成功返回true否则返回false
     */
    Boolean update(Menu menu);

    /**
     * 添加角色与菜单对应数据
     *
     * @param roleId 角色ID
     */
    void deleteRoleMenu(Long roleId);

    /**
     * 按菜单ID列表删除菜单信息
     *
     * @param idList ID列表
     * @return 删除成功返回true否则返回false
     */
    Boolean delete(List idList);
}
